Patchare un Serial Number usando Wdasm32
<<<< | Home | A-Z Main | Bookmark | tell a Friend! | Translate | Create Page - Site | e-mail Login | Search Site - WWW | Anonymize | >>>>
áááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááU
ý                     [x] RingZ3r0  Proudly Presents [x]                     ý
ñ        UŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ        ñ
         3         Patchare un Serial Number usando Wdasm32         3

                                  aLoNg3x

                             16 Dicembre 1998
                        Revisione del 12 Marzo 1999

--==[   PREMESSA   ]==--------------------------------------------------------

LE INFORMAZIONI CHE TROVATE ALL'INTERNO DI QUESTO FILE SONO PER PURO SCOPO
DIDATTICO. L'AUTORE NON INCORAGGIA CHI VOLESSE UTILIZZARLO PER SCOPI ILLEGALI.

--==[  DIFFICOLTA' ]==--------------------------------------------------------

scala : *=Novizio, **=Apprendista, ***=Esperto, ****=Guru
target: *1/2

--==[  TOOLS USATI ]==--------------------------------------------------------

* Wdasm32        (URSoftware)
* HIEW 6.01
* Cervello in buone condizioni :)

--==[ INTRODUZIONE ]==--------------------------------------------------------

Best viewed with old m$-do$ EditoR...

Ciao ragazzi !! Molti di voi riterranno probabilmente il cracking un'arte
molto difficile che solo i piu' esperti piratoni sanno padroneggiare :)
Con questo tutorial cerchero' di dimostrarvi che in realta' e' tutto molto
semplice (lo dimostra gia' il fatto che un lamer come me sia capace di
crakkare ;)...
Deh io oh uh ! (schersooo ingenierrr :)

Come (spero :) avrete notato questa e' una versione leggermente sistemata del
mio vecchio tutorial, ho usato un impaginatura TM of +Kill3xx (ehi killo non
vorrai mica i diritti d'autore ih ih :) che pero' ho adattato alle 80 colonne
delle vostre stampanti in modo tale da non farvi buttar via un sakko di carta.
Inoltre ho tagliato parti poco interessanti e altre abbastanza imbecilli...
Ok... basta cazzate ! iniziamo :)

--==[  LET'S GO :p ]==--------------------------------------------------------


Quale sara' la nostra vittima ??? Elementare... il L0phtCrack x win 95 degli
amici delle "L0pht Heavy Industries" (scaricatelo da www.l0pht.com)
La versione di cui parlo e' la 2.1 (mi pare... boh... non la trovo piu' :)
comunque nella nuova 2.5x non e' cambiato assolutamente nulla ( a parte gli
offset delle istruzioni deh :)

Ok.. unzippate il programma in una cartellina sul disco e fatelo partire...
vi saltera' fuori una finestra che vi rompe le palle perche' mancano 15 giorni
alla scadenza del periodo di prova...

Bene Bene... premete il pulsante "Register" in basso... apparira' una finestra
di dialogo che vi chiede il Serial Number (d'ora in avanti SN...)

Mettetene uno a caso... tipo 80980 e clikkate su "Ok"... il programma vi
dira' "You have entered an invalid code. Please try again."
Ok... chiudete tutto... segnatevi questo messaggio e aprite il Wdasm...
disassemblate il file l0phtcrack95.exe e quindi salvate il codice asm...
Azz... sul mio rottame di PC ci vuole una vita.. :(

Clikkate in alto a destra sul bottoncino delle String References...
Fate scorrere la lista cercando il messaggio "You have enter....."
Appena lo trovate clikkateci sopra due volte... piomberete cosi' all'interno
del codice sorgente dove e' utilizzata questa stringa...
Perfetto.. ora come dicono i +hcukers serve un po' di "Zen"... cercheremo
di applicare il Dead Listing approach....

:004*1A26 50                      push eax              ;Passaggio parametri
:004*1A27 51                      push ecx
:004*1A28 E863940100              call 004*AE90         ;Funzione di controllo
:004*1A2D 83C408                  add esp, 00000008     ;del serial
:004*1A30 85C0                    test eax, eax         ;Test correttezza...
:004*1A32 742C                    je 004*1A60           ;Jmp se e' giusto...
:004*1A34 57                      push edi
:004*1A35 57           
1000
           push edi

* Possible StringData Ref from Data Obj ->"You have entered an invalid code. "
                                        ->"Please try again."
                                  |
:004*1A36 6820A24400              push 0044A220
:004*1A3B E874DD0200              call 004*F7B4
:004*1A40 56                      push esi
:004*1A41 8D8C24CC000000          lea ecx, dword ptr [esp+000000CC]
:004*1A48 E874420200              call 004*5CC1
:004*1A4D 8D4C246C                lea ecx, dword ptr [esp+6C]
:004*1A51 E8392B0200              call 004*458F
:004*1A56 83F801                  cmp eax, 00000001
:004*1A59 74A0                    je 004*19FB
:004*1A5B E9A7000000              jmp 004*1B07

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004*1A32(C)                                   
|                                               ;Se e' giusto registra il code
                                                ;nel Registo...
:004*1A60 89BDC0000000            mov dword ptr [ebp+000000C0], edi

* Possible StringData Ref from Data Obj ->"Software\LHI\L0phtCrack"
                                  |
:004*1A66 BF08A24400              mov edi, 0044A208
:004*1A6B 83C9FF                  or ecx, FFFFFFFF
:004*1A6E 33C0                    xor eax, eax
.....
.....
.....
.....

* Possible StringData Ref from Data Obj ->"You have successfully registered "
                                        ->"L0phtCrack 2.0."
                                  |
:004*1AFB 68C4A14400              push 0044A1C4
:004*1B00 E8AFDC0200              call 004*F7B4
:004*1B05 33FF                    xor edi, edi

Beh... avete capito ??? e' tutto molto semplice... il programma fa controllare
ad una funzione se il SN e' corretto... e se lo e' lo scrive nel registro di
configurazione... altrimenti non esegue il jmp e visualizza il messaggio
di errore... :)

Bene... e ora ??? potrebbe sembrare logico cambiare il "je 00401A60" in un
"jne" o addirittura in un "jmp"... ma poi noterete che appena si riavvia il
programma esso e' ancora unregistered...
Quindi ??? Allora... bisogna entrare all'interno della call:
:004*1A28 E863940100              call 004*AE90
Vediamo un po'... (attenzione ricordatevi che 'sta funzione ritorna '0' se il
SN e' corretto e ritorna '1' se il SN e' sbagliato !!! :)


* Referenced by a CALL at Addresses:
|:004*1938   , :004*1A28   , :004*2C34   , :004*4207   , :004*429E   
|:004*44A3   , :004*44BC   , :004*44D5   , :004*44EE   , :004*876E   
|:004*8B87                              ;Uh..uh... molte call a questa 
|                                       ;funzione.... OTTIMO ;)
|                                       ;vuol dire che essa e' richiamata
|                                       ;anche in altri punti del programma :)
:004*AE90 55                      push ebp
:004*AE91 8BEC                    mov ebp, esp
:004*AE93 57                      push edi
:004*AE94 56                      push esi
:004*AE95 53                      push ebx
:004*AE96 8B750C                  mov esi, dword ptr [ebp+0C] <- SN corretto
:004*AE99 8B7D08                  mov edi, dword ptr [ebp+08] <- SN inserito.. 
:004*AE9C 8D0540F74400            lea eax, dword ptr [0044F740]
:004*AEA2 83780800                cmp dword ptr [eax+08], 00000000
:004*AEA6 753B                    jne 004*AEE3
:004*AEA8 B0FF                    mov al, FF
:004*AEAA 8BC0                    mov eax, eax

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004*AEB8(C), :004*AED8(C)
|
:004*AEAC 0AC0             -----> or al, al    <- Controlla se si e' arrivati
:004*AEAE 742E            |       je 004*AEDE     alla fine della stringa...
:004*AEB0 8A06            |       mov al, byte ptr [esi] <- 1ø char in "al"
:004*AEB2 46              |       inc esi  <- fa scorrere il SN corretto...
:004*AEB3 8A27            |       mov ah, byte ptr [edi] <- 2ø char in "ah"
:004*AEB5 47              |       inc edi  <- fa scorrere il SN inserito...
:004*AEB6 38C4        
1000
    |       cmp ah, al  <- se sono uguali passa al char
:004*AEB8 74F2             ------ je 004*AEAC    successivo
:004*AEBA 2C41                    sub al, 41
:004*AEBC 3C1A                    cmp al, 1A
:004*AEBE 1AC9                    sbb cl, cl
:004*AEC0 80E120                  and cl, 20
:004*AEC3 02C1                    add al, cl
:004*AEC5 0441                    add al, 41
:004*AEC7 86E0                    xchg al, ah
:004*AEC9 2C41                    sub al, 41
:004*AECB 3C1A                    cmp al, 1A
:004*AECD 1AC9                    sbb cl, cl
:004*AECF 80E120                  and cl, 20
:004*AED2 02C1                    add al, cl
:004*AED4 0441                    add al, 41
:004*AED6 38E0                    cmp al, ah
:004*AED8 74D2                    je 004*AEAC <- idem....
:004*AEDA 1AC0                    sbb al, al
:004*AEDC 1CFF                    sbb al, FF

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004*AEAE(C)
|                                              <- mette in "al" l'ultimo char
:004*AEDE 0FBEC0                  movsx eax, al   (se il SN e' giusto al=00)
                                                  dato che siamo arrivati in
                                                  fondo alla stringa...
:004*AEE1 EB78                    jmp 004*AF5B <- salta alla fine della
                                                  funzione ;)
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004*AEA6(C)
|
:004*AEE3 F0                      lock

..................
...............
............

ecc... ecc.....


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004*AEE1(U)
|
:004*AF5B 5B                      pop ebx
:004*AF5C 5E                      pop esi
:004*AF5D 5F                      pop edi
:004*AF5E C9                      leave
:004*AF5F C3                      ret


Beh... allora ??? secondo me e' tutto molto semplice... il problema sta nel
far ritornare alla funzione il valore 00... come ??? basta far scorrere la
stringa fino alla fine (come spero sappiate di gia' le stringhe sono Null
Terminated cioe' la loro fine e' segnata dal char 00h)... quindi bastera'
modificare il jump condizionale:

:004*AEB8 74F2             je 004*AEAC
in un bel "JMP" cioe':
:004*AEB8 EBF2             jmp 004*AEAC

Fatto ! ora prendete il file offset... cioe' 1*2*8... segnatevelo...
Aprite il vostro hexeditor di fiducia eeee.... fate un Goto a 1*2*8... e
modificate il byte "74" in "EB"...
Uscite e SALVATE !!!

Riavviate il l0pht che vi chiedera' ancora di registrarvi... bene... inserite
un Sn a caso e vedrete che il programma vi ringraziera' tutto contento ;)
Ok... ora per concludere e per controllare il nostro crack riavviate il prog
che dovrebbe apparire correttamente registrato :)
                             
Ah... finalmente sono arrivato alla fine... ;)

Ricordatevi che se volete distribuire un crack dovete crearvi un patcher in
qualunque linguaggio di programmazione ( consiglio Pascal o C ) o se siete
capaci addirittura in Assembler >:)

Comunque vi ricordo che possedere programmi non registrati e' illegale e
inoltre immorale quindi... comprateveli !!!

--==[ NOTE FINALI ]==---------------------------------------------------------

Allora in 'sta nuova versione mi son rifatto la sezione dei saluti finali
anche perche' ora con la nascita di Ringzer0 ho conosciuto un sakko di nuovi
amici :p

ok.... allora ringrazio:

Kill3xx:   perche' mi ha sopportato tutta l'estate scorsa, quando non sapevo
           crakkare neanche una sega (beh... per dir la verita non e' che son
           migliorato + di tanto :)
+Malattia: perche' non mi ha ancora mandato a cagare e perche' e' troppo pazzo
           (mala va' che scherzo... ih ih o:)    
xOANINO:   beh, ho imparato a crakkare leggendo i suoi tutes, quindi mi sembra
           corretto essergli riconoscente :)

E infine saluto (in rigoroso ordine alfabetico :)

Alor (salutami anche kasko e gigi :)
D4e
2df
mon
+Fravia
Furbet
Genius (sai che non t'ho mai incontrato ?)
Insanity (grazie per l'upload :)
MetalHead (vedi Genius)
-Neural_Noise (cazzo... ma sei troppo fuori !! :)
Pusillus 
Samp3i (Eh mantengo le promesse :)
Suby
T3x
YanOrel

(e tutti quelli i cui sono nomi sono andati persi tra i miei neuroni -:)

Ciauz a tutti :P

p.s. se volete sfogarvi, insultarmi, picchiarmi o semplicemente chiedere
informazioni scrivete a along3x@geocities.com


"...chi dice che le fiabe si raccontano ai poppanti
non ha tenuto conto di milioni di votanti..."

Tratto da: "Tutti in Pista" --- PUNKREAS

--==[     EOF      ]==--------------------------------------------------------

Click to go UP


begin banner Exchange zone

Member of BannerPower Rotation System

Italia BPath Network